* <example>
* <title>Using the @import rule</title>
* <programlisting>
- * @import url (path/to/common.css)
+ * @import url ("path/to/common.css")
* </programlisting>
* </example>
* <para>
* <entry></entry>
* <entry>
* <programlisting>
- * border-image: url (/path/to/image.png) 3 4 3 4 stretch;
- * border-image: url (/path/to/image.png) 3 4 4 3 repeat stretch;</programlisting>
+ * border-image: url ("/path/to/image.png") 3 4 3 4 stretch;
+ * border-image: url ("/path/to/image.png") 3 4 4 3 repeat stretch;</programlisting>
* </entry>
* </row>
* <row>
}
#define SKIP_SPACES(s) while (s[0] == ' ' || s[0] == '\t' || s[0] == '\n') s++;
+#define SKIP_SPACES_BACK(s) while (s[0] == ' ' || s[0] == '\t' || s[0] == '\n') s--;
static GtkSymbolicColor *
symbolic_color_parse_str (const gchar *string,
{
gchar *path, *chr;
- if (!g_str_has_prefix (str, "url"))
+ if (g_str_has_prefix (str, "url"))
{
- *end_ptr = (gchar *) str;
- return NULL;
- }
+ str += strlen ("url");
+ SKIP_SPACES (str);
- str += strlen ("url");
- SKIP_SPACES (str);
+ if (*str != '(')
+ {
+ *end_ptr = (gchar *) str;
+ return NULL;
+ }
- if (*str != '(')
- {
- *end_ptr = (gchar *) str;
- return NULL;
- }
+ chr = strrchr (str, ')');
- chr = strchr (str, ')');
+ if (!chr)
+ {
+ *end_ptr = (gchar *) str;
+ return NULL;
+ }
- if (!chr)
- {
- *end_ptr = (gchar *) str;
- return NULL;
- }
+ str++;
+ SKIP_SPACES (str);
- str++;
- SKIP_SPACES (str);
+ if (*str == '"' || *str == '\'')
+ {
+ gchar *p;
+ p = str;
+ str++;
- path = g_strndup (str, chr - str);
- g_strstrip (path);
+ SKIP_SPACES_BACK (chr);
- *end_ptr = chr + 1;
+ if (*chr != *p)
+ {
+ *end_ptr = str;
+ return NULL;
+ }
+ chr--;
+ }
+ else
+ {
+ *end_ptr = str;
+ return NULL;
+ }
+
+ path = g_strndup (str, chr - str);
+ g_strstrip (path);
+
+ *end_ptr = chr + 1;
+ }
+ else
+ {
+ path = g_strdup (str);
+ *end_ptr = str + strlen (str);
+ }
/* Always return an absolute path */
if (!g_path_is_absolute (path))
css_provider_push_scope (css_provider, SCOPE_VALUE);
g_scanner_get_next_token (scanner);
- if (scanner->token != G_TOKEN_IDENTIFIER)
- return G_TOKEN_IDENTIFIER;
-
- path = path_parse (css_provider,
- g_strstrip (scanner->value.v_identifier));
-
- if (!path)
+ if (scanner->token == G_TOKEN_IDENTIFIER)
+ path = path_parse (css_provider,
+ g_strstrip (scanner->value.v_identifier));
+ else if (scanner->token == G_TOKEN_STRING)
+ path = path_parse (css_provider,
+ g_strstrip (scanner->value.v_string));
+ else
return G_TOKEN_IDENTIFIER;
css_provider_pop_scope (css_provider);